Simplify Path

Given an absolute path for a file (Unix-style), simplify it.

For example,

path = "/home/"``, =>“/home”`

path = "/a/./b/../../c/", => "/c"

Corner Cases:

  • Did you consider the case where path = "/../"?
    In this case, you should return "/".
  • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
    In this case, you should ignore redundant slashes and return "/home/foo".

Solution:

  1. public class Solution {
  2. public String simplifyPath(String path) {
  3. Set<String> set = new HashSet<>(Arrays.asList("", ".", ".."));
  4. Deque<String> deque = new ArrayDeque<>();
  5. for (String token : path.split("/")) {
  6. if (token.equals("..") && !deque.isEmpty())
  7. deque.pollLast();
  8. if (set.contains(token))
  9. continue;
  10. deque.addLast(token);
  11. }
  12. StringBuilder sb = new StringBuilder();
  13. while (!deque.isEmpty()) {
  14. sb.append("/" + deque.pollFirst());
  15. }
  16. return sb.length() == 0 ? "/" : sb.toString();
  17. }
  18. }